home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / ksd / source / ksdapi.s < prev    next >
Text File  |  1998-09-29  |  2KB  |  69 lines

  1. *--------------------------------------------------------------------
  2. *    KSD API呼びだし
  3. *--------------------------------------------------------------------
  4.  
  5.     .include    iocscall.mac
  6.     .include    ksd.mac
  7.     .xref        _DevCheck2
  8.  
  9. *--------------------------------------------------------------------
  10.  
  11.     .text
  12.     .even
  13. API    .dc.l    API_None    * APIアドレス
  14. KSDSym    .dc.b    'AIG-KSD',0    * 隠しデバイス名
  15.     .even
  16.  
  17. *--------------------------------------------------------------------
  18. *
  19.     .xdef    _KSDSetAPI    * int KSDSetAPI(void)
  20. _KSDSetAPI:            * APIアドレス取得(初期化)
  21. * -> d0.l : <>0:正常終了(APIアドレス) , 0=KSDがない
  22.     clr.l    -(sp)        * NULL(デバイス名を格納する必要なし)
  23.     pea    KSDSym(pc)    * 隠しデバイス名
  24.     bsr    _DevCheck2    * デバイスチェック : a0=DevHead
  25.     addq.l    #8,sp
  26.     tst.b    d0
  27.     bne    @f        * KSDがある
  28. API_None:
  29.     * KSDがない
  30.     moveq.l    #0,d0
  31.     rts
  32.  
  33. @@:    * KSDがある
  34.     lea.l    KSD_API(a0),a1    * アドレス保存
  35.     IOCS    _B_LPEEK    * スーパーバイザー領域を読むこともあるため
  36.     move.l    d0,API        * アドレス保存
  37.     rts
  38.  
  39. *--------------------------------------------------------------------
  40.  
  41.     .xdef    _KSDCallAPI    * int KSDCallAPI(unchar command)
  42. _KSDCallAPI:            * API呼びだし
  43.     move.b    4+3(sp),d0    * d0.b=コマンド
  44. *
  45.     .xdef    KSDCallAPI    * アセンブラー用
  46. KSDCallAPI:            * API呼びだし
  47. * d0.b=コマンド
  48.     movem.l    d3/a1,-(sp)
  49.     move.l    d0,d3        * d0保存
  50.     clr.l    a1
  51.     IOCS    _B_SUPER    * super visor mode
  52.     move.l    d0,-(sp)
  53.     *
  54.     move.l    d3,d0        * d0復帰
  55.     move.l    API(pc),a1
  56.     jsr    (a1)        * API呼びだし(super visor領域のこともある)
  57.     *
  58.     move.l    d0,d3        * d0保存
  59.     move.l    (sp)+,d0
  60.     bmi    @f        * 元からsuper visorであった
  61.     move.l    d0,a1
  62.     IOCS    _B_SUPER    * user mode(d0破壊)
  63. @@:    move.l    d3,d0        * d0復帰
  64.     movem.l    (sp)+,d3/a1
  65.     rts
  66.  
  67. *--------------------------------------------------------------------
  68.     .end
  69.